#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>

int main() {
    int mypipe[2];
    // 检查 pipe 创建是否成功
    if (pipe(mypipe) == -1) {
        perror("pipe failed");
        return 1;
    }
    pid_t pid = fork();
    if (pid < 0) {
        perror("create process failed");
        return 1;
    }
    if (pid == 0) { // 子进程
        close(mypipe[1]);
        // 检查 dup2 是否成功
        if (dup2(mypipe[0], 0) == -1) {
            perror("dup2 failed");
            return 1;
        }
        close(mypipe[0]);
        execlp("grep", "grep", "init", NULL);
        perror("execlp grep failed"); // 处理 execlp 失败
        return 1;
    } else { // 父进程
        close(mypipe[0]);
        // 检查 dup2 是否成功
        if (dup2(mypipe[1], 1) == -1) {
            perror("dup2 failed");
            return 1;
        }
        close(mypipe[1]);
        execlp("ps", "ps", "aux", NULL);
        perror("execlp ps failed"); // 处理 execlp 失败
        return 1;
    }
}
